A nossa empresa e seus investidores decidiram montar um time de futebol na Europa com a mesma qualidade dos melhores times europeus da atualidade. Para isso, solicitaram uma análise da equipe de BI sobre quais jogadores poderiam adquirir, desde que tivessem um preço competitivo. Devemos contratar 11 jogadores titulares para as seguintes posições:
| Posição | Descrição | Jogadores |
|---|---|---|
| GK | Goleiro | 1 |
| Center-back | Zagueiro central | 2 |
| Outside-back | Zagueiro lateral | 2 |
| Center-mid | Meio de campo | 2 |
| Outside-mid | Lateral | 2 |
| Forward | Atacante | 2 |
As posições detalhadas podem ser encontradas na figura a seguir:
Como não é possível medir todos os jogadores do mundo a partir de agora, o novo time considerou aceitável usar a base de dados com 17994 jogadores (originários do jogo Fifa 18).
Informações dos jogadores:
ID, name, full_name, club, club_logo, special, league, flag, nationality, photo, Position.
Habilidades do jogador (numéricos):
crossing, finishing, heading_accuracy, short_passing, volleys, dribbling, curve, free_kick_accuracy, long_passing, ball_control, acceleration, sprint_speed, agility, reactions, balance, shot_power, jumping, stamina, strength, long_shots, aggression, interceptions, positioning, vision, penalties, composure, marking, standing_tackle, sliding_tackle, gk_diving, gk_handling, gk_kicking, gk_positioning, gk_reflexes.
Características físicas:
Numéricos: age, height_cm, weight_kg.
Categóricos: birth_date, body_type.
Booleano: real_face
Dados financeiros (numéricos):
eur_value, eur_wage, eur_release_clause
Para iniciarmos a análise é preciso instalar e carregar alguns pacotes. Esta seção é considerada um cabeçalho e evolui conforme a análise acontece.
Obs.: Caso sua estação não possua algum dos pacotes, é necessário instalar antes!
library(DBI) #Interface para base de dados
library(RPostgres) #Conexão com base de dados
library(readr) #Leitura de arquivo CSV
library(openxlsx) # Leitura de arquivo Excel
library(dplyr) #Manipulação de dados
library(plotly) #Gráficos Interativos
library(randomForest) #Aprendizado estatístico Advanced Analytics
library(magrittr)
A seguir, serão criadas algumas funções auxiliares que serão utilizadas em diversos trechos de análise.
#O professor criou a função abaixo para dar o display de um gráfico do plotly sempre com o mesmo tamanho
display.graph <- function(mygraph, width = 800, height = 500, margin = 0){
ret <- mygraph %>%
layout(autosize = F, width = width, height = height, margin = margin) %>%
config(showLink = F)
return ( ret )
}
A seguir temos exemplos de obtenção de dados de arquivo csv, arquivo Excel e banco de dados. Utilize seu conhecimento para obter as informações requeridas indicadas na seção 1:
# Exemplo Excel
exemplo.cameras <- read.xlsx("https://storage.googleapis.com/ds-publico/cameras.baltimore.xlsx")
# Exemplo CSV
exemplo.copas <- read_csv(url("https://storage.googleapis.com/ds-publico/Copas.csv"))
# Exemplo DB
con <- dbConnect(Postgres(), host="35.225.23.89", port=55432,
db="fiapbi", user="biuser", password="biuser")
exemplo.starwars <- dbGetQuery(con, "SELECT * FROM public.starwars")
exemplo.school_persons <- dbGetQuery(con, "SELECT * FROM reports.school_persons")
dbDisconnect(con)
rm(con)
Insira na célula a seguir os passos para obtenção dos dados mencionados. Lembre-se de armazenar em variáveis com nomes apropriados.
## COLOQUE SUA RESPOSTA AQUI
players = read.xlsx("https://storage.googleapis.com/ds-publico/Fifa/jogadores.xlsx")
con = dbConnect(Postgres(), host="35.225.23.89", port=55432, db="fiapbi", user="biuser", password="biuser")
habilities = dbGetQuery(con, "SELECT * FROM futebol.habilities")
physical = dbGetQuery(con, "SELECT * FROM futebol.body")
dbDisconnect(con)
rm(con)
finances = read_csv("https://storage.googleapis.com/ds-publico/Fifa/financial.csv")
Para facilitar todas as análises a seguir, crie uma tabela chamada fifa, com o “join” de todas as tabelas (use inner_join)
## COLOQUE SUA RESPOSTA AQUI
fifa = players %>%
inner_join(habilities,by="ID") %>%
inner_join(physical, by="ID") %>%
inner_join(finances, by="ID")
if(!'fifa' %in% ls()){
print("Querido aluno, a tabela 'fifa' precisa existir!")
} else {
print("Parece que está certo, vamos seguir!")
}
Todo processamento deve se iniciar de uma análise exploratória, ou seja, conhecer os dados que temos disponíveis.
Para isso, vamos usar alguns conceitos de estatística descritiva.
Os códigos a seguir exibem informações sobre uma tabela chamada mtcars, entre estes dados:
- Quantidade de linhas e colunas;
- Resumos estatísticos das colunas;
- Primeiros registros da tabela.
dim(mtcars)
summary(mtcars)
head(mtcars)
Use o exemplo acima e informe :
dim(fifa)
summary(fifa)
Qual a quantidade de jogadores no arquivo de jogadores: 17994
Qual o salário médio dos jogadores, em Euro: 11504
O exemplo abaixo exibe quantas espécies diferentes temos na tabela exemplo.starwars
length( unique(exemplo.starwars$species) )
Baseado nisso, quantos Clubes e quantas ligas temos disponíveis:
length(unique(fifa$club))
length(unique(fifa$league))
Quantos jogadores temos em cada liga? Use o exemplo abaixo para responder.
exemplo.starwars %>%
group_by(species) %>%
summarise(Personagens = n()) %>%
arrange(desc(Personagens))
Reposta:
fifa %>%
group_by(league) %>%
summarise(players = n()) %>%
arrange(desc(players))
Nossa base de dados possui 647 times divididos em 41 ligas. As seguintes ligas serão selecionadas como as melhores ligas para análise dos jogadores:
- English Championship
- French Ligue 1
- German Bundesliga
- Spanish Primera División
- Italian Serie A (ok, sei que há controvérsias)
Para faciliar nosso trabalho futuro, armazenamos as ligas de referência selecionadas no vetor best_leagues:
best_leagues = c("English Championship", "French Ligue 1", "German Bundesliga", "Spanish Primera División", "Italian Serie A")
best_species = c("Droid", "Mirialan")
Agora exiba um gráfico nos informando quantos jogadores estão na liga de referência. Veja o exemplo abaixo que exibe quantos personages estão nas espécies de referência:
exemplo.starwars %>%
group_by(species) %>%
summarise(Personagens = n()) %>%
arrange(desc(Personagens)) %>%
mutate( Referencia = species %in% best_species) -> exemplo.agregacao
print(exemplo.agregacao)
## COLOQUE SUA RESPOSTA AQUI
n_players_by_league = fifa %>%
group_by(league) %>%
summarise(players = n()) %>%
arrange(desc(players)) %>%
mutate(reference = league %in% best_leagues) %T>%
print()
Exiba o gráfico de barras de todas as ligas, destacando as que são ligas de referência. Use o exemplo abaixo:
grafico <- exemplo.agregacao %>%
filter(Referencia == F) %>%
plot_ly(x = ~species, y = ~Personagens, color = ~Referencia, type = 'bar', name="Outras")
grafico <- grafico %>% add_bars(x = ~species, y = ~Personagens, color = ~Referencia, data = exemplo.agregacao[exemplo.agregacao$Referencia==T,], name="Best")
display.graph(grafico)
Minhas ligas, se tudo der certo, um gráfico como este deve ser exibido: